package agent.behaviour;

import jade.core.behaviours.SimpleBehaviour;
import jade.lang.acl.ACLMessage;
import jade.wrapper.StaleProxyException;

import java.util.ArrayList;

import agent.enums.Ressource;
import agent.enums.TypeAgent;
import agent.model.royaume.AgentRoyaume;

/**
 * SimpleBehaviour servant à lire les résumés que l'AgentRoyaume reçoit.
 * @author Jean-François Augé & Guillaume Poças
 */
public class ReadReportBehaviour extends SimpleBehaviour {

	private static final long serialVersionUID = 1L;

	private AgentRoyaume agent;

	/**
	 * Constructeur.
	 * @param a, l'agent au quel est attache le Behaviour.
	 */
	public ReadReportBehaviour(AgentRoyaume a) {
		super(a);
		agent = a;
	}

	/**
	 * Lis un résumé à chaque cycle puis stock les résultats dans un HashMap.
	 */
	@Override
	public void action() {
		// bloquant tant qu'il n'y a pas de réponse
		ACLMessage msg = agent.receive();
		String[] args = null;
		double[] argsDouble = null;

		if(msg != null) {
			//if(Constant.DEBUG_COM) System.out.println(agent.getLocalName()+" < "+msg.getContent());

			// reçoit un résumé
			if(msg.getPerformative() == ACLMessage.INFORM) {
				args = msg.getContent().split("\\s");
				argsDouble = new double[args.length-2];
				for(int i=0; i<argsDouble.length; i++)
					argsDouble[i] = Double.valueOf(args[i+2]);
				agent.getMap().put(args[1], argsDouble);
				/*if(agent.getIhm().getMain() != null)
					agent.getIhm().getMain().getPanel().getModel().fireTableDataChanged();*/
			} else if(msg.getPerformative() == ACLMessage.INFORM_REF)
				if(msg.getContent().contains("INFORM dead")) {
					String name = msg.getSender().getLocalName();
					double[] stats = agent.getMap().get(name);
					agent.getMap().remove(name);
					agent.getMap().put("[dead] "+name, stats);
				} else if(msg.getContent().contains("INFORM birth")) {
					args = msg.getContent().split("\\s");
					try {
						//agent.creeAgent(TypeAgent.valueOf(args[2]), true, Ressource.valueOf(args[3]));
						ArrayList<String> params = new ArrayList<String>();
						params.add("-argent");
						params.add(args[4]);
						params.add("-stockConsommationCourant");
						params.add(args[5]);
						params.add("-stockProductionCourant");
						params.add(args[6]);
						agent.creeAgentParameters(TypeAgent.valueOf(args[2]), params, Ressource.valueOf(args[3]));
					} catch (StaleProxyException e) {
						e.printStackTrace();
					}
				}

			//agent.printMap();
		}
		else block();
	}

	/** 
	 * Le comportement ne s'arrête pas.
	 */
	@Override
	public boolean done() {
		return false;
	}

}
